cmake_minimum_required(VERSION 3.0.0)
#cmake 版本最低要求，部分命令需要对应
#版本才可用
project(hudi)
#project 用于表示Cmake 的工程名
set(CMAKE_BUILD_TYPE "release")
#set Cmake 命令: set (var value)
#此处使用set 设置变量, Cmake 中的
#内置命令一般使用大写表示

message(STATUS "Install Prefix (CMAKE_INSTALL_PREFIX):     ${CMAKE_INSTALL_PREFIX}")
message(STATUS "Binary Directory (BIN_INSTALL_DIR):        ${BIN_INSTALL_DIR}")
message(STATUS "Library Directory (LIB_INSTALL_DIR):       ${LIB_INSTALL_DIR}")
message(STATUS "Include Directory (INCLUDE_INSTALL_DIR):   ${INCLUDE_INSTALL_DIR}")
message(STATUS "Documentation Directory (DOC_INSTALL_DIR): ${DOC_INSTALL_DIR}")
message(STATUS "Man Pages Directory (MAN_INSTALL_DIR):     ${MAN_INSTALL_DIR}")
message(STATUS "Build Type (CMAKE_BUILD_TYPE):             ${CMAKE_BUILD_TYPE}")
message(STATUS "Build static libraries:                    ${BUILD_STATIC_LIBS}")
message(STATUS "Build shared library:                      ${BUILD_SHARED_LIBS}")
message(STATUS "Project source dir::                       ${PROJECT_SOURCE_DIR}")
#message Cmake 命令：message([mod] "msg")  message 用于打印输出信息,类似于echo
#[mod] 用于设置输出的信息的类型,可选配置

if(HCRTOS)
set(LIB_TYPE STATIC)
else()
set(LIB_TYPE SHARED)
endif()
#条件判断语句： if (expression) else/else if(expression)  endif(<expression>)
#用于设置库变量是动态库还是静态库

include_directories(
                    ./include
                    ./common
                    ./flash
                    ./video
                    ./audio
                    ./cec					
                    ./bluetooth
                   )
#头文件包含命令： 用于设置目标头文件的搜索路径
#类似于gcc -l 指头文件路径的方式

file(GLOB COM_SRC
     common/hudi_log.c
     )
#file() 命令可用于执行并实现文件操作 GLOB 命令是根据指定模式搜索文件,通常配合
#file命令使用 file(GLOB <var> path <expression>) 即将路径按指定的模式搜索出来
#并得带结果返回到var 中


if (FLASH_API)
	file(GLOB FLASH_SRC
		flash/hudi_flash.c
		flash/hudi_flash_otp.c
		)
endif()
#此处同样使用file(GLOB) 的方式配置源码文件，使用if () elseif() 判断宏定义
#FLASH_API 来配置源码文件，宏定义通过上一级makefile 指定并定义，具体见文件
#hclinux/package/hudi/hudi.mk  ==>  HUDI_CONF_OPTS += -DFLASH_API=ON
    
if (VIDEO_API)
	file(GLOB VIDEO_SRC
		video/hudi_vdec.c
		)
endif()

if (AUDIO_API)
	file(GLOB AUDIO_SRC
		audio/hudi_adec.c
		audio/hudi_snd.c
		)
endif()

if (DISPLAY_API)
	file(GLOB DISPLAY_SRC
		display/hudi_display.c
		)
endif()

if (AVSYNC_API)
	file(GLOB AVSYNC_SRC
		avsync/hudi_avsync.c
		)
endif()

if (CEC_API)
	file(GLOB CEC_SRC
		cec/*.c
		cec/adapter/*.c
		cec/utils/*.c
		)
endif()

if (BLUETOOTH_API)
    file(GLOB BLUETOOTH_SRC
		bluetooth/*.c
		)
endif()

if(SOC_HC15XX)
	add_definitions(-DSOC_HC15XX)
endif()
# add_definitions 用于添加对应的宏宏定义,类似于Makefile 中的-D 选项

add_library(hudi ${LIB_TYPE} ${COM_SRC} ${FLASH_SRC} ${VIDEO_SRC} ${AUDIO_SRC} ${DISPLAY_SRC} ${AVSYNC_SRC} ${CEC_SRC} ${BLUETOOTH_SRC})
#add_libary(name <type> src_file ....) 命令用于设置指定源码文件生成库文件 
#此处命令则表示将上述源码文件生成libhudi ,lib前缀会自动加上
install(TARGETS hudi LIBRARY DESTINATION lib ARCHIVE DESTINATION lib)
#install(TARGET target [DESTINATION <dir>] ......) 命令用于将指定的目标安装(复制) 到指定的路径, TARGET 表示指定的目标，LIBRARY 表示目标被
#安装为库 DESTINATION lib  表示目标安装路径为 lib  ARCHIVE DESTINATION 表示静态库的目标安装路径
